package com.cy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @SpringBootApplication
 *
 * 此注解描述的类为是springboot的入口对象
 * 我们通过这个入口来启动springboot项目,这个入口有什么特点?
 * 1)由SpringBootApplication注解描述（在springboot项目中只有一个）
 * 2)包一个main方法，在方法中完成springboot项目的初始化
 * FAQ:请问初始化时springboot底层会做什么?
 * 	1)加载类（通过类加载器(ClassKoader)将指定位置的类读到内存-->底层通过线程调用IO从磁盘读取数据）
 * 	2)对类进行分析(创建字节码对象,——Class类型,通过反射获取其配置信息)
 * 	3)对于指定配置(例如由spring特定注解描述)的对象存储其配置信息(借助BeanDefinition对象存储)
 * 	4)基于BeanDefinition对象中class的配置信息构建类的实例（Bean对象）,从而进行bean对象的管理
 *
 * 		思考：浏览器中输入一个url（例如：http://www.baidu.com）然后回车,底层会做点什么?
 * 		1)将url发送给域名服务器(DNS),如果DNS解析域名获取IP地址（IP地址是网络当中计算机的唯一标识）
 * 		2)通过IP地址找到网络中的计算机服务器,再通过端口号定位到具体的web服务器(例如tomcat)（端口号是计算机应用程序的唯一标识）
 * 		3)web服务器可以通过线程调用io读取到网络中的http协议中的数据,并对数据进行解析,然后封装到request对象
 * 		4)web服务器调用JAVAEE规范中的对象（Filter,Servlet）处理请求,请求处理结束再响应一个结果传递到客户端
 */
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}
